'use strict';
exports.__esModule = true;
exports.isSameNodeType = isSameNodeType;
exports.getNodeProps = getNodeProps;
var _util = require('../util');
var _functionalComponent = require('./functional-component');
var _domIndex = require('../dom/index');
/** Check if two nodes are equivalent.
* @param {Element} node
* @param {VNode} vnode
* @private
*/
function isSameNodeType(node, vnode) {
Iif (_functionalComponent.isFunctionalComponent(vnode)) return true;
var nodeName = vnode.nodeName;
if (_util.isFunction(nodeName)) return node._componentConstructor === nodeName;
if (_domIndex.getNodeType(node) === 3) return _util.isString(vnode);
return _util.toLowerCase(node.nodeName) === nodeName;
}
/**
* Reconstruct Component-style `props` from a VNode.
* Ensures default/fallback values from `defaultProps`:
* Own-properties of `defaultProps` not present in `vnode.attributes` are added.
* @param {VNode} vnode
* @returns {Object} props
*/
function getNodeProps(vnode) {
var props = _util.clone(vnode.attributes),
c = vnode.children;
if (c) props.children = c;
var defaultProps = vnode.nodeName.defaultProps;
if (defaultProps) {
for (var i in defaultProps) {
if (_util.hasOwnProperty.call(defaultProps, i) && !(i in props)) {
props[i] = defaultProps[i];
}
}
}
return props;
}
|